package br.gov.ce.fortaleza.cti.util;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.vividsolutions.jts.geom.Point;

public class GeoUtil {

	public static final String CLIENTE_LOGADO = "clienteLogado";

	public static final String USUARIO_LOGADO = "usuarioLogado";

	public static final String SYS_ADM_ROLE = "SYSADM";

	public static final String SYS_ADM_ROLE_VEICULO = "SYSADM_VEICULO";

	public static final String USER_ADM_ROLE = "USERADM";

	public static final String REL_ACOMPANHAMENTO_ROTA = "RELATORIO_ACOMPANHAMENTO_ROTA";

	public static final String REL_ESTATISTICO = "RELATORIO_ESTATISTICO";

	public static final String REL_HORIMETRO = "RELATORIO_HORIMETRO";

	public static final String REL_ODOMETRO = "RELATORIO_ODOMETRO";

	public static final String REL_PORTARIA = "RELATORIO_PORTARIA";

	public static final String REL_PONTOS_PARADA = "RELATORIO_PONTOS_PARADA";

	public static final String REL_PONTOS_PASSAGEM = "RELATORIO_PONTOS_PASSAGEM";

	public static final String REL_POSICAO = "RELATORIO_POSICAO";

	public static final String REL_SENSORES = "RELATORIO_SENSORES";

	public static final String REL_TELEMETRIA = "RELATORIO_TELEMETRIA";

	public static final String REL_BANGUELA = "RELATORIO_BANGUELA";

	public static final String REL_VELOCIDADE_MAX = "RELATORIO_VELOCIDADE_MAXIMA";

	public static final String REL_TEMPERATURA_MAX = "RELATORIO_TEMPERATURA_MAXIMA";

	public static final String REL_RPM_MAX = "RELATORIO_RPM_MAXIMO";

	public static final String REL_ESTATISTICA_VEICULO = "RELATORIO_ESTATISTICA_VEICULO";

	public static final String REL_LEVANTAMENTO_GARFO = "RELATORIO_LEVANTAMENTO_GARFO";

	public static final String REL_SENSORES_TELEMETRIA = "RELATORIO_SENSORES_TELEMETRIA";

	public static final String REL_NIVEL_COMBUSTIVEL = "RELATORIO_NIVEL_COMBUSTIVEL";

	public static final String REL_HORIMETRO_TELEMETRIA = "RELATORIO_HORIMETRO_TELEMETRIA";

	public static final String REL_TEMPERATURA = "RELATORIO_TEMPERATURA";

	public static final String REL_VELOCIDADE = "RELATORIO_VELOCIDADE";

	public static final String REL_LOG_USUARIO = "RELATORIO_LOG_USUARIO";

	public static final String REL_TERMINAL_TEXTO = "RELATORIO_TERMINAL_TEXTO";

	public static final String CADASTRO_ROTA = "CADASTRO_ROTA";

	public static final String CADASTRO_PONTO = "CADASTRO_PONTO";

	public static final String CADASTRO_AREA = "CADASTRO_AREA";

	public static final String CADASTRO_FORNECEDOR = "CADASTRO_FORNECEDOR";

	public static final String CADASTRO_PRODUTO = "CADASTRO_PRODUTO";

	public static final String CADASTRO_VEICULO = "CADASTRO_VEICULO";

	public static final String CADASTRO_TIPO_AVISO = "CADASTRO_TIPO_AVISO";

	public static final String CADASTRO_TIPO_OCORRENCIA = "CADASTRO_TIPO_OCORRENCIA";

	public static final String CADASTRO_SERVICO = "CADASTRO_SERVICO";

	public static final String CADASTRO_MANUTENCAO = "CADASTRO_MANUTENCAO";

	public static final String CADASTRO_PORTARIA = "CADASTRO_PORTARIA";

	public static final String MON_TEMPERATURA = "MONITORAMENTO_TEMPERATURA";

	public static final String MON_OCORRENCIA = "MONITORAMENTO_OCORRENCIA";

	public static final String MON_AUDIO = "MONITORAMENTO_AUDIO";

	public static final String ACESSO_WIKICRIMES = "ACESSO_WIKICRIMES";

	public static final String COMANDO = "COMANDO";

	public static final String TRANSMISSAO = "TRANSMISSAO";

	public static final String CHECKROTA_MAIL = "checkrota@checkrota.com.br";

	public static final Float DISTANCIA_PONTO_PARADA_CLIENTE = 100F;

	public static final Integer TEMPO_MIN_PARADA = 3;

	public static final Integer HORIMETRO_ID = 3;

	public static boolean isAdministradorSistema() {

		return getRequest().isUserInRole(SYS_ADM_ROLE);
	}

	public static boolean isAdministradorSistemaVeiculo() {

		return getRequest().isUserInRole(SYS_ADM_ROLE_VEICULO);
	}

	public static boolean isUsuarioAdministrador() {

		return getRequest().isUserInRole(USER_ADM_ROLE);
	}

	public static boolean isRelatorioAcompanhamentoRota() {

		return getRequest().isUserInRole(REL_ACOMPANHAMENTO_ROTA);
	}

	public static boolean isRelatorioEstatistico() {

		return getRequest().isUserInRole(REL_ESTATISTICO);
	}

	public static boolean isRelatorioHorimetro() {

		return getRequest().isUserInRole(REL_HORIMETRO);
	}

	public static boolean isRelatorioOdometro() {

		return getRequest().isUserInRole(REL_ODOMETRO);
	}

	public static boolean isRelatorioPortaria() {

		return getRequest().isUserInRole(REL_PORTARIA);
	}

	public static boolean isAcessoWikiCrimes() {

		return getRequest().isUserInRole(ACESSO_WIKICRIMES);
	}

	public static boolean isRelatorioPontosParada() {

		return getRequest().isUserInRole(REL_PONTOS_PARADA);
	}

	public static boolean isRelatorioPontosPassagem() {

		return getRequest().isUserInRole(REL_PONTOS_PASSAGEM);
	}

	public static boolean isRelatorioPosicao() {

		return getRequest().isUserInRole(REL_POSICAO);
	}

	public static boolean isRelatorioSensores() {

		return getRequest().isUserInRole(REL_SENSORES);
	}

	public static boolean isRelatorioTelemetria() {

		return getRequest().isUserInRole(REL_TELEMETRIA);
	}

	public static boolean isRelatorioBanguela() {

		return getRequest().isUserInRole(REL_BANGUELA);
	}

	public static boolean isRelatorioVelocidadeMaxima() {

		return getRequest().isUserInRole(REL_VELOCIDADE_MAX);
	}

	public static boolean isRelatorioTemperaturaMaxima() {

		return getRequest().isUserInRole(REL_TEMPERATURA_MAX);
	}

	public static boolean isRelatorioRpmMaximo() {

		return getRequest().isUserInRole(REL_RPM_MAX);
	}

	public static boolean isRelatorioEstatisticaVeiculo(){

		return getRequest().isUserInRole(REL_ESTATISTICA_VEICULO);
	}

	public static boolean isRelatorioLevantamentoGarfo(){

		return getRequest().isUserInRole(REL_LEVANTAMENTO_GARFO);
	}

	public static boolean isRelatorioSensoresTelemetria(){

		return getRequest().isUserInRole(REL_SENSORES_TELEMETRIA);
	}

	public static boolean isRelatorioNivelCombustivel(){

		return getRequest().isUserInRole(REL_NIVEL_COMBUSTIVEL);
	}

	public static boolean isRelatorioHorimetroTelemetria(){

		return getRequest().isUserInRole(REL_HORIMETRO_TELEMETRIA);
	}

	public static boolean isRelatorioTemperatura() {

		return getRequest().isUserInRole(REL_TEMPERATURA);
	}

	public static boolean isRelatorioVelocidade() {

		return getRequest().isUserInRole(REL_VELOCIDADE);
	}

	public static boolean isRelatorioLogUsuario() {

		return getRequest().isUserInRole(REL_LOG_USUARIO);
	}

	public static boolean isRelatorioTerminalTexto() {

		return getRequest().isUserInRole(REL_TERMINAL_TEXTO);
	}

	public static boolean isCadastroRota() {

		return getRequest().isUserInRole(CADASTRO_ROTA);
	}

	public static boolean isCadastroFornecedor() {

		return getRequest().isUserInRole(CADASTRO_FORNECEDOR);
	}

	public static boolean isCadastroServico() {

		return getRequest().isUserInRole(CADASTRO_SERVICO);
	}

	public static boolean isCadastroPortaria() {

		return getRequest().isUserInRole(CADASTRO_PORTARIA);
	}

	public static boolean isCadastroProduto() {

		return getRequest().isUserInRole(CADASTRO_PRODUTO);
	}

	public static boolean isCadastroManutencao() {

		return getRequest().isUserInRole(CADASTRO_MANUTENCAO);
	}

	public static boolean isCadastroPonto() {

		return getRequest().isUserInRole(CADASTRO_PONTO);
	}

	public static boolean isCadastroArea() {

		return getRequest().isUserInRole(CADASTRO_AREA);
	}

	public static boolean isCadastroVeiculo() {

		return getRequest().isUserInRole(CADASTRO_VEICULO);
	}

	public static boolean isCadastroTipoAviso() {

		return getRequest().isUserInRole(CADASTRO_TIPO_AVISO);
	}

	public static boolean isCadastroTipoOcorrencia() {

		return getRequest().isUserInRole(CADASTRO_TIPO_OCORRENCIA);
	}

	public static boolean isMonitoramentoTemperatura() {

		return getRequest().isUserInRole(MON_TEMPERATURA);
	}

	public static boolean isMonitoramentoOcorrencia() {

		return getRequest().isUserInRole(MON_OCORRENCIA);
	}

	public static boolean isMonitoramentoAudio() {

		return getRequest().isUserInRole(MON_AUDIO);
	}

	public static boolean isComando() {

		return getRequest().isUserInRole(COMANDO);
	}

	public static boolean isTransmissao() {

		return getRequest().isUserInRole(TRANSMISSAO);
	}

	public static boolean isUserInRole(String role) {

		return getRequest().isUserInRole(role);
	}

	public static HttpSession getSession() {

		HttpServletRequest request = getRequest();

		return request.getSession(false);
	}

	public static HttpServletRequest getRequest() {

		return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}

	public static Float distanciaEntrePonto(Point pointA, Point  pointB) {

		double lat1 = pointA.getX() / (180D / (22D / 7D));

		double lng1 = pointA.getY() / (180D / (22D / 7D));

		double lat2 = pointB.getX() / (180D / (22D / 7D));

		double lng2 = pointB.getY() / (180D / (22D / 7D));

		return (float) (long) (6378800D * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1)));
	}

}